﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Claro.QuestionModel;

namespace Claro.ClientInterface
{
    public partial class frmQuestao : Form
    {
        clsGrupo grupo;
        clsQuestao questao;
        clsEvento evento;
        Timer tmrRestante;
        Timer tmrBuscar;
        int segundosRestantes;

        public frmQuestao(clsGrupo grupo)
        {
            InitializeComponent();
            btnResponder.Enabled = false;
            this.grupo = grupo;
            lblNomeGrupo.Text = this.grupo.nmGrupo + " " + this.grupo.codGrupo;

            //Timer q busca uma nova questão no banco
            tmrBuscar = new System.Windows.Forms.Timer();
            tmrBuscar.Interval = 300;
            tmrBuscar.Tick += new System.EventHandler(BuscarQuestao);

            //Monta o timer da questão
            tmrRestante = new System.Windows.Forms.Timer();
            tmrRestante.Interval = 1000;
            tmrRestante.Tick += new System.EventHandler(tmrRestante_Tick);

            //questao = new clsQuestao();
            evento = clsEvento.getInstance();

            tmrBuscar.Enabled = true;

            ExibirPlacar();
        }

        private void tmrRestante_Tick(object sender, EventArgs e)
        {
            if (this.segundosRestantes == -1)
            {
                //MessageBox.Show("O tempo acabou!!");
                tmrRestante.Stop();
                return;
            }
            int minutos = segundosRestantes / 60;
            int segundos = segundosRestantes-- % 60;
            string tempo = String.Format("{0:d2}:{1:d2}", new object[] { minutos, segundos });

            lblTempo.Text = tempo;
        }

        private void BuscarQuestao(object sender, EventArgs e)
        {
            questao = clsQuestao.SelecionarQuestaoAberta(evento.codEvento);
            if (questao != null)
            {
                tmrBuscar.Enabled = false;
                ExibirQuestao();
                segundosRestantes = questao.tempoDisponivel;
                tmrRestante.Enabled = true;
                btnResponder.Enabled = true;
            }
        }

        private void ExibirQuestao()
        {
            //exibe o enunciado
            lblEnunciado.Text = questao.textoQuestao;

            //e as alternativas
            clbAlternativas.DataSource = null;
            clbAlternativas.DataSource = questao.Alternativas;
            clbAlternativas.ValueMember = "estaCorreta";
            clbAlternativas.DisplayMember = "textoAlternativa";
        }

        private void clbAlternativas_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            if (questao.tipoQuestao == TiposQuestoes.Uma_Alternativa)
            {
                //garante q apenas uma alternativa estará marcada
                if (e.NewValue == CheckState.Checked)
                {
                    for (int i = 0; i < clbAlternativas.Items.Count; i++)
                    {
                        clbAlternativas.SetItemCheckState(i, CheckState.Unchecked);
                    }
                }
            } 
        }

        private void ExibirPlacar()
        {
            dgvPlacar.DataSource = null;
            dgvPlacar.DataSource = evento.ExibirPlacar();
            dgvPlacar.Columns[0].Visible = false; //codGrupo
            dgvPlacar.Columns[1].HeaderText = "Grupo"; //nmGrupo
            dgvPlacar.Columns[2].Visible = false; //Maquina
            dgvPlacar.Columns[3].Visible = false; //Respondido
            dgvPlacar.Columns[4].Width = 70; //Pontos
        }

        private void btnResponder_Click(object sender, EventArgs e)
        {
            foreach (clsAlternativa alternativaMarcada in clbAlternativas.CheckedItems)
            {
                foreach (clsAlternativa alternativaDisponivel in questao.Alternativas)
                {
                    if (alternativaDisponivel.codAlternativa == alternativaMarcada.codAlternativa)
                        alternativaDisponivel.estaCorreta = true;
                }
            }

            if (VerificarValidadeResposta())
            {
                tmrBuscar.Enabled = false;
                tmrRestante.Enabled = false;
                grupo.ResponderQuestao(questao);
                AbrirLobby();
                tmrBuscar.Enabled = true;
            }
        }

        private bool VerificarValidadeResposta()
        {
            return true;
        }

        private void AbrirLobby()
        {   
            frmLobby f = new frmLobby(questao);
            f.ShowDialog();
            //this.Close();
        }


    }
}
